package com.ruoyi.common.utils;

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonUtils {
    private static final ObjectMapper objectMapper = new ObjectMapper();

    /**
     * JSON 字符串转 Java 对象
     * @param json JSON 字符串
     * @param clazz 目标类
     * @param <T> 泛型类型
     * @return Java 对象
     */
    public static <T> T parseObject(String json, Class<T> clazz) {
        if (json == null || json.isEmpty()) {
            return null;
        }
        try {
            return objectMapper.readValue(json, clazz);
        } catch (Exception e) {
            throw new RuntimeException("JSON 转换失败", e);
        }
    }

    /**
     * 处理复杂类型（如 List、Map）
     * @param json JSON 字符串
     * @param typeReference 类型引用（如 new TypeReference<List<User>>() {}）
     * @param <T> 泛型类型
     * @return Java 对象
     */
    public static <T> T parseObject(String json, TypeReference<T> typeReference) {
        if (json == null || json.isEmpty()) {
            return null;
        }
        try {
            return objectMapper.readValue(json, typeReference);
        } catch (Exception e) {
            throw new RuntimeException("JSON 转换失败", e);
        }
    }
}
